import os
from PIL import Image
import logging

def convert_images_to_jpg(folder_path, quality=85):
    """
    将文件夹内所有图片转换为JPG格式并删除原文件
    
    参数：
    folder_path (str): 目标文件夹路径
    quality (int): JPG保存质量 (1-100)，默认85
    
    支持格式：PNG, BMP, GIF, TIFF, WebP
    """
    # 配置日志
    logging.basicConfig(
        filename='image_conversion.log',
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    
    # 支持的输入格式（排除JPG自身）
    supported_formats = {'.png', '.bmp', '.gif', '.tif', '.tiff', '.webp'}
    
    try:
        # 验证文件夹有效性
        if not os.path.isdir(folder_path):
            raise ValueError(f"无效的文件夹路径：{folder_path}")

        # 遍历文件夹
        for filename in os.listdir(folder_path):
            file_path = os.path.join(folder_path, filename)
            
            # 跳过子目录和非文件项
            if not os.path.isfile(file_path):
                continue
                
            # 拆分文件名和扩展名
            base_name, ext = os.path.splitext(filename)
            ext_lower = ext.lower()
            
            # 跳过非支持格式和JPG文件
            if ext_lower not in supported_formats:
                continue
                
            try:
                # 打开图片并处理Alpha通道
                with Image.open(file_path) as img:
                    # 去除Alpha通道（如果存在）
                    if img.mode in ('RGBA', 'LA'):
                        background = Image.new('RGB', img.size, (255, 255, 255))  # 白色背景
                        background.paste(img, mask=img.split()[-1])  # 使用Alpha通道作为蒙版
                        img = background
                    elif img.mode != 'RGB':
                        img = img.convert('RGB')
                    
                    # 构建新文件名
                    new_filename = f"{base_name}.jpg"
                    new_path = os.path.join(folder_path, new_filename)
                    
                    # 保存JPG文件（优化压缩）
                    img.save(new_path, 
                            'JPEG', 
                            optimize=True, 
                            quality=quality)
                    
                    # 验证新文件
                    if os.path.exists(new_path):
                        # 安全删除原文件
                        os.remove(file_path)
                        logging.info(f"转换成功：{filename} → {new_filename}")
                    else:
                        raise RuntimeError("新文件未能正确生成")

            except Exception as e:
                logging.error(f"文件 {filename} 转换失败：{str(e)}")
                continue

    except Exception as e:
        logging.error(f"全局错误：{str(e)}")
        raise
